#pragma once 
#include "Common.h"
#include "Program.h"
#include <string>
#include "TransformationSection.h"
#include "EngineFeatures.h"
#include <map>
#include <vector>

class EXPORT EffectData
{
public:
	std::string vs;
	std::string vsPP;
	std::string fs;
	std::string fsPP;
};


class EXPORT Effect
{
	Program program;
	TransformationSection transorms;

	std::map<EngineFeature,IEffectSection *> sectionsMap;
	std::vector<IEffectSection*> sectionsMemoryHandler;

	void ClearSections();
public:
	Effect();
	~Effect();

	void Init(EffectData & data);
	void Apply();
	void AddSection(EngineFeature featureID,IEffectSection * section);
	IEffectSection * GetSection(EngineFeature featureID);
	TransformationSection * GetTransformSection();
};